﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using MotoGame;

namespace MotoGame.Estados.Jogo
{
    public enum Jogador { JOGADOR1, JOGADOR2 };

    class Jogo:EstadoBase
    {

        //moto
        Moto[] motos;
     
        Fundo Cenario;
        Fundo CenarioMono;
        Fundo Montanhas;
        Fundo Nuvens;

        GameWindow Window;

        public Jogo(ContentManager Content, GameWindow Window_)
            :base(Content)
        {
            Window =Window_;

            //Cria instancia da moto
            motos = new Moto[1];
            motos[0] = new Moto(Content, Game1.WindowRef,new Vector2(200, 300),Jogador.JOGADOR1 );
           // motos[1] = new Moto(Content, Game1.WindowRef,new Vector2(400, 300),Jogador.JOGADOR2 );

            Cenario = new Fundo(Content.Load<Texture2D>("Cenario"), Window,0);
            Cenario.VelocidadeRelativaX = 1;

            CenarioMono = new Fundo(Content.Load<Texture2D>("CenarioMono"), Window, 0);
            Cenario.VelocidadeRelativaX = 1;

            Montanhas = new Fundo(Content.Load<Texture2D>("Montanhas"), Window,0);
            Montanhas.VelocidadeRelativaX = 0.5f ;

            Nuvens = new Fundo(Content.Load<Texture2D>("Nuvens"), Window,0);
            Nuvens.VelocidadeRelativaX = 0;


        }

        public override void Update(GameTime gameTime)
        {
            foreach (var moto in motos)
            {
                moto.Update(gameTime);

                
                //Moto saindo pela direita.
                if (moto.posicao.X > Window.ClientBounds.Width * 2/3)
                {
                    Vector2 aux = new Vector2(Window.ClientBounds.Width * 2 / 3, moto.posicao.Y);

                    if (Cenario.origem.X < Cenario.texture.Bounds.Width - Window.ClientBounds.Width)
                    {
                        moto.posicao = aux;
                    }
                      
                    aux = new Vector2(moto.velocidade.X, 0);

                    Cenario.Update(gameTime, aux);
                    CenarioMono.Update(gameTime, aux);
                    Nuvens.Update(gameTime, aux);

                    if (Cenario.origem.X < Cenario.texture.Bounds.Width - Window.ClientBounds.Width)
                    {
                        Montanhas.Update(gameTime, aux);
                    }
                }
                //Moto saindo pela esquerda.
                if (moto.posicao.X < Window.ClientBounds.Width * 1 / 3)
                {
                    Vector2 aux = new Vector2(Window.ClientBounds.Width * 1 / 3, moto.posicao.Y);

                    if (Cenario.origem.X > 0)
                    {
                        moto.posicao = aux;
                    }

                    aux = new Vector2(-moto.velocidade.X, 0);

                    Cenario.Update(gameTime, aux);
                    CenarioMono.Update(gameTime, aux);
                    Nuvens.Update(gameTime, aux);

                    if (Cenario.origem.X > 0)
                    {
                        Montanhas.Update(gameTime, aux);
                    }
                }

                //Moto saindo por baixo.
                if (moto.posicao.Y > Window.ClientBounds.Height * 2 / 3)
                {
                    Vector2 aux = new Vector2(moto.posicao.X, Window.ClientBounds.Height * 2 / 3);

                    if (Cenario.origem.Y < Cenario.texture.Bounds.Height - Window.ClientBounds.Height)
                    {
                        moto.posicao = aux;
                    }

                    aux = new Vector2(0, moto.velocidade.Y);

                    Cenario.Update(gameTime, aux);
                    CenarioMono.Update(gameTime, aux);
                    Montanhas.Update(gameTime, aux);
                    Nuvens.Update(gameTime, aux);    
                   
                }

                //Moto saindo por cima.
                if (moto.posicao.Y < Window.ClientBounds.Height * 1 / 3)
                {
                    Vector2 aux = new Vector2(moto.posicao.X, Window.ClientBounds.Height * 1 / 3);

                    if (Cenario.origem.Y > 0)
                    {
                        moto.posicao = aux;
                    }
                    aux = new Vector2(0, -moto.velocidade.Y);

                    Cenario.Update(gameTime, aux);
                    CenarioMono.Update(gameTime, aux);
                    Montanhas.Update(gameTime, aux);
                    Nuvens.Update(gameTime, aux);                
                }
                
            }

        }
        public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            Nuvens.Draw(gameTime, spriteBatch);
            Montanhas.Draw(gameTime, spriteBatch);
            CenarioMono.Draw(gameTime, spriteBatch);
            Cenario.Draw(gameTime, spriteBatch);


            foreach (var moto in motos)
            {
                moto.Draw(gameTime, spriteBatch);
            }
        }

    }
}
